// 若在开发者工具中无法预览广告，请切换开发者工具中的基础库版本
// 在页面中定义激励视频广告
let videoAd = null
// 若在开发者工具中无法预览广告，请切换开发者工具中的基础库版本
// 在页面中定义插屏广告
let interstitialAd = null
Page({
  data: {
    todos: [{
        text: "写一万行代码",
        id: 1,
        checked: false,
        value: 1,
        isShowDelete: false,
      },
      {
        text: "读一千次技术文档",
        id: 2,
        checked: false,
        value: 2,
        isShowDelete: false,
      },
      {
        text: "改一百次需求",
        id: 3,
        checked: false,
        value: 3,
        isShowDelete: false,
      },
    ],
    text: "", // 用来记录输入框的值
    total: 0,
    unfinish: 0,
    finish: 0,
    startX: 0,
    moveX: 0,
    isStart: false,
    tid: 0,
    isShow2: false,
    imgSrc: '/static/qrcode.jpg',
    copyText: '小程序教程+源代码链接: https://pan.baidu.com/s/1MKHP9oUBShvM84_tGepIbg?pwd=nckt 提取码: nckt'
  },
  // 写这个函数的目的就是为了获取输入框的值
  getInputText(event) {
    // console.log(event.detail.value)
    let text = event.detail.value
    // 给data下的text属性赋值
    this.setData({
      // text: text ,
      text
    })
  },
  // 把输入的值添加到todos数组中
  addToDoItem() {
    // 判断输入框是否为空
    if (this.data.text == "") {
      // 弹窗提示
      wx.showToast({
        title: '输入框不能为空',
        icon: 'error'
      })
      return false;
    }
    // 获取data对象下的text属性
    let text = this.data.text;
    // 定义空对象
    let obj = {};
    // 添加属性
    let rValue = Math.random().toString().slice(2);
    obj.text = text;
    obj.id = rValue;
    obj.checked = false;
    obj.value = rValue;
    obj.isShowDelete = false;
    // 获取todos数组
    let todos = this.data.todos;
    // 添加
    // todos.push(obj);
    todos.unshift(obj);
    // 重新给data下的todos数组赋值
    this.setData({
      todos,
      text: "",
    })
    // 把数据缓存在本地
    wx.setStorageSync('TODO', JSON.stringify(todos))
    // 重新计算数量
    this.countNum();
  },
  // 编写函数 专门用于统计数量
  countNum() {
    let arr = this.data.todos;
    let total = arr.length;
    let finish = 0;
    for (let i = 0; i < arr.length; i++) {
      // 判断每一个todo是否有checked属性为true
      if (arr[i].checked) {
        finish++
      }
    }
    let unfinish = total - finish;
    // 赋值 让页面做出变化
    this.setData({
      total,
      unfinish,
      finish
    })
  },
  // 用户获取缓存
  getStorageFn() {
    let str = wx.getStorageSync('TODO')
    if (str) {
      this.setData({
        todos: JSON.parse(str)
      })
    }
  },
  onShow() {
    this.getStorageFn();
    this.countNum();
  },
  // 初始化 
  // 页面加载完成就执行的函数
  onLoad() {
    this.getStorageFn();
    this.countNum();
    // 在页面onLoad回调事件中创建激励视频广告实例
    if (wx.createRewardedVideoAd) {
      videoAd = wx.createRewardedVideoAd({
        adUnitId: 'adunit-234ba9a4e19db710'
      })
      //
      videoAd.onLoad(() => {})
      videoAd.onError((err) => {
        console.error('激励视频光告加载失败', err)
      })
      videoAd.onClose((res) => {
        if (res && res.isEnded) {
          // 正常播放结束，可以下发游戏奖励
          this.setData({
            isShow2: true
          })
        } else {
          // 播放中途退出，不下发游戏奖励
        }
      })
    }

    // // 在页面onLoad回调事件中创建插屏广告实例
    // if (wx.createInterstitialAd) {
    //   interstitialAd = wx.createInterstitialAd({
    //     adUnitId: 'adunit-8f6498dcc2696667'
    //   })
    //   interstitialAd.onLoad(() => {})
    //   interstitialAd.onError((err) => {
    //     console.error('插屏广告加载失败', err)
    //   })
    //   interstitialAd.onClose(() => {})
    // }

    // // 在适合的场景显示插屏广告
    // if (interstitialAd) {
    //   interstitialAd.show().catch((err) => {
    //     console.error('插屏广告显示失败', err)
    //   })
    // }
  },
  // 表示用户点击了复选框
  checkboxChange(e) {
    // console.log('checkbox发生change事件，携带value值为：', e.detail.value)
    // 获取data中的todos数组
    const arr = this.data.todos
    // 获取列表中勾选了的todo
    const values = e.detail.value
    // console.log("values:",values)
    // console.log("arr:",arr)
    // 循环todos数组
    for (let i = 0; i < arr.length; ++i) {
      // 初始化i对应的选项checked是false
      arr[i].checked = false
      for (let j = 0; j < values.length; ++j) {
        // 判断todos数组中每一个todo的value和勾选中的todo的value是否一致
        if (arr[i].value == values[j]) {
          // 把对应todo的布尔值设置为true
          arr[i].checked = true
          // 跳出循环
          break
        }
      }
    }
    // console.log(arr);
    // 重新赋值
    this.setData({
      todos: arr
    })
    // 把数据缓存在本地
    wx.setStorageSync('TODO', JSON.stringify(arr))
    // todos的数量重新计算
    this.countNum();
  },

  // 表示用户手指按下
  startFn(event) {
    // console.log(event.currentTarget.dataset.id)
    // 记录手指在页面按下的水平坐标
    let startX = event.touches[0].pageX;
    // 获取todo对应的id
    let tid = event.currentTarget.dataset.id;
    this.setData({
      startX,
      isStart: true,
      tid
    })
  },
  // 表示用户手指滑动
  moveFn(event) {
    // console.log(this.data.isStart)
    if (this.data.isStart) {
      // 记录手指在页面按下的水平坐标
      let moveX = event.touches[0].pageX;
      this.setData({
        moveX
      })
    }
  },
  // 表示用户手指松开
  endFn() {
    // 表示用户手指没有滑动距离
    if (this.data.moveX == 0) return;
    if (this.data.tid == 0) return;
    // 记录滑动记录
    let x = this.data.moveX - this.data.startX;
    // console.log({x});
    let v = Math.abs(x);
    // 获取todos 数组
    let todos = this.data.todos;
    let tid = this.data.tid;
    let arr;
    // 滑动距离超过100 才对“删除”按钮做出处理
    if (v > 100) {
      if (x > 0) {
        // 向右  隐藏“删除”
        arr = todos.map(item => {
          if (item.id == tid) {
            item.isShowDelete = false;
          }
          return item;
        })
      } else {
        // 向左  显示“删除”
        arr = todos.map(item => {
          // console.log("--->",item.id == tid);
          item.isShowDelete = false; //其他todo的“删除”隐藏
          if (item.id == tid) {
            item.isShowDelete = true;
          }
          return item;
        })
      }
    }
    // 判断arr是否有值
    // console.log(arr)
    if (arr) {
      this.setData({
        todos: arr
      })
    }
  },
  onFocusFn(){
    this.resetTodos();
  },
  // 重置列表
  resetTodos(){
    let todos = this.data.todos;
    let arr = todos.map(item => {
      item.isShowDelete = false;
      return item;
    })
    this.setData({
      todos: arr
    })
  },

  // 用户点击“删除”可以删除todo
  removeTodo(event) {
    let id = event.currentTarget.dataset.id;
    // 询问一下
    wx.showModal({
      title: '温馨提示',
      content: '要删除这个todo?',
      complete: (res) => {
        if (res.cancel) {

        }
        if (res.confirm) {
          //  获取data对象下的todos数组
          let arr = this.data.todos;
          // 通过数组api 过滤方法 filter 函数
          let newArr = arr.filter(item => {
            if (item.id != id) {
              return item;
            }
          })
          // 重新赋值
          this.setData({
            todos: newArr
          })
          // 把数据缓存在本地
          wx.setStorageSync('TODO', JSON.stringify(newArr))
          // 重新统计数量
          this.countNum();
        }
      }
    })
  },

  // 显示广告，观看完成可以领取资料的方法
  showVideoAdFn() {
    wx.showModal({
      title: '温馨提示',
      content: '完整观看视频广告，获取小程序源代码和制作教程',
      complete: (res) => {
        if (res.cancel) {

        }

        if (res.confirm) {
          try {
            // 用户触发广告后，显示激励视频广告
            if (videoAd) {
              videoAd.show().catch(() => {
                // 失败重试
                videoAd.load()
                  .then(() => {
                    videoAd.show()
                  })
                  .catch(err => {
                    console.error('激励视频 广告显示失败', err)
                  })
              })
            }
          } catch (e) {
            console.log(e)
          }
        }
      }
    })
  },

  // 原生模板广告
  adLoad() {
    console.log('原生模板广告加载成功')
  },
  adError(err) {
    console.error('原生模板广告加载失败', err)
  },
  adClose() {
    console.log('原生模板广告关闭')
  },
  // 长按保存
  saveImage(e) {
    let that = this
    wx.showActionSheet({
      itemList: ['保存到相册'],
      success(res) {
        let url = e.currentTarget.dataset.url;
        wx.getSetting({
          success: (res) => {
            console.log(res);
            if (!res.authSetting['scope.writePhotosAlbum']) { // 未授权
              wx.authorize({
                scope: 'scope.writePhotosAlbum',
                success: () => {
                  that.saveImgSuccess(url);
                },
                fail: (res) => {
                  console.log(res);
                  wx.showModal({
                    title: '保存失败',
                    content: '请开启访问手机相册的权限',
                    success(res) {
                      wx.openSetting()
                    }
                  })
                }
              })
            } else { // 已授权
              that.saveImgSuccess(url);
            }
          },
          fail: (res) => {
            console.log(res);
          }
        })
      },
      fail(res) {
        console.log(res.errMsg)
      }
    })
  },
  // 同意授权保存到相册
  saveImgSuccess(url) {
    wx.getImageInfo({
      src: url, // 通过getImageInfo将src转换成改图片的本地路径，给saveImageToPhotosAlbum使用
      success: (res) => {
        console.log(res)
        let path = res.path;
        wx.saveImageToPhotosAlbum({
          filePath: path, // filePath路径不能是网络图片路径
          success: (res) => {
            console.log(res);
            wx.showToast({
              title: '已保存到相册',
            })
          },
          fail: (res) => {
            console.log(res);
          }
        })
      },
      fail: (res) => {
        console.log(res);
      }
    })
  },
  // 查看大图
  imgClick() {
    var imgUrl = this.data.imgSrc;
    console.log('imgClick success', imgUrl)
    wx.previewImage({
      current: imgUrl, //当前显示图片的链接
      urls: [imgUrl], //需要预览的图片链接列表
      success: (res => {
        console.log('接口调用成功', res)
      })
    })
  },
  // 点击复制
  copyAction() {
    wx.setClipboardData({
      data: this.data.copyText || e.currentTarget.dataset.copytext, //这是复制的内容
      success(res) {
        wx.getClipboardData({
          success(res) {
            wx.showToast({
              title: '复制成功',
            })
          }
        })
      }
    })
  },
})